// ReSharper disable InconsistentNaming

namespace InsideSalesApiClient
{
    public class InsideSalesAddLeadOptions
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InsideSalesAddLeadOptions"/> class.
        /// </summary>
        public InsideSalesAddLeadOptions()
        {
            dup_basis = new[] {"phone"};
        }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="InsideSalesAddLeadOptions"/> requires sending a notification email about the new lead.
        /// </summary>
        /// <value>
        ///   <c>true</c> if if a notification email should not be sent out about the new lead ; otherwise, <c>false</c>.
        /// </value>
        public bool do_not_notify { get; set; }

        /// <summary>
        /// Gets or sets the ID of a phone survey to call the user with.
        /// </summary>
        /// <value>
        /// The ID of a phone survey to call the user with.
        /// </value>
        public int phone_survey_id { get; set; }

        /// <summary>
        /// Gets or sets the ID of an email template to use when sending a notification to the Lead.
        /// </summary>
        /// <value>
        /// The ID of an email template to use when sending a notification to the Lead.
        /// </value>
        public int email_template_id { get; set; }

        /// <summary>
        /// Gets or sets the fields to compare against for duplicates (One or more more of the following: company_name, email, zip, name, and/or phone) 
        /// REQUIRED when checking for duplicates.
        /// </summary>
        /// <value>
        /// The fields to compare against for duplicates (One or more more of the following: company_name, email, zip, name, and/or phone) 
        /// </value>
        public string[] dup_basis { get; set; }

        /// <summary>
        /// Gets or sets the id of the campaign to assign the Lead to if it's a duplicate 
        /// REQUIRED when checking for duplicates and relate_to_dup is set to false .
        /// </summary>
        /// <value>
        /// The id of the campaign to assign the Lead to if it's a duplicate.
        /// </value>
        public int dup_campaign_id { get; set; }

        /// <summary>
        /// Gets or sets the date and time of how old existing Leads can be and still be considered duplicates.
        /// </summary>
        /// <value>
        /// The date and time of how old existing Leads can be and still be considered duplicates.
        /// </value>
        public string time_frame { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="InsideSalesAddLeadOptions"/> sets duplicates to be related
        /// REQUIRED when checking for duplicates and dup_campaign_id is not set .
        /// </summary>
        /// <value>
        ///   <c>true</c> if duplicates should be related; otherwise, <c>false</c>.
        /// </value>
        public bool relate_to_dup { get; set; }

        /// <summary>
        /// Gets or sets the ID of an inbound initiative to put the Lead in.
        /// </summary>
        /// <value>
        /// The ID of an inbound initiative to put the Lead in.
        /// </value>
        public int inbound_initiative_id { get; set; }

        /// <summary>
        /// Gets or sets the ID of an IVR to call the Lead with.
        /// </summary>
        /// <value>
        /// The ID of an IVR to call the Lead with.
        /// </value>
        public int ivr_id { get; set; }

        /// <summary>
        /// Gets or sets the ID of the routing rule to use if the Lead is not a duplicate.
        /// </summary>
        /// <value>
        /// The ID of the routing rule to use if the Lead is not a duplicate.
        /// </value>
        public int routing_rule_id { get; set; }

        /// <summary>
        /// Gets or sets the number of idle days to still include in rerouting.
        /// </summary>
        /// <value>
        /// The number of idle days to still include in rerouting.
        /// </value>
        public int reroute_if_idle_days { get; set; }

        /// <summary>
        /// Gets or sets the ID of the dialer initiative to put the Lead in if call_now is set to True.
        /// </summary>
        /// <value>
        /// The ID of the dialer initiative to put the Lead in if call_now is set to True.
        /// </value>
        public int dialer_initiative_id { get; set; }


        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="InsideSalesAddLeadOptions"/> requires the new lead to be added to the top of the dialer cache.
        /// </summary>
        /// <value>
        ///   <c>true</c> if the new lead should be added to the top of the dialer cache ; otherwise, <c>false</c>.
        /// </value>
        public bool call_now { get; set; }

        /// <summary>
        /// Gets or sets the start compliance time (hh:mm AM|PM).
        /// </summary>
        /// <value>
        /// The start compliance time (hh:mm AM|PM).
        /// </value>
        public string start_compliance { get; set; }

        /// <summary>
        /// Gets or sets the end compliance time (hh:mm AM|PM).
        /// </summary>
        /// <value>
        /// The end compliance time (hh:mm AM|PM).
        /// </value>
        public string end_compliance { get; set; }
    }
}